import { NestModule } from './../../node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d';
import { DynamicModule, Global, MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common';
import { ListService } from './list.service';
import { ListController } from './list.controller';
import { MyMiddleware } from 'src/myMiddleware/middleware';

// 知识点
//1 共享模块:例如 ListService想暴露给 其他模块使用就可以使用exports 导出该服务

//2  全局模块:我们给 list 模块添加 @Global() 他便注册为全局模块  在其他模块使用无须在module  import 导入

@Global()
@Module({
  controllers: [ListController],
  providers: [ListService],
  exports: [ListService]
})

// 知识点
// 使用(自定义)中间件
// 使用方法 在模块里面 实现 configure 返回一个消费者  consumer 通过 apply 注册中间件 通过forRoutes 指定  Controller 路由
export class ListModule implements NestModule{
  configure(consumer: MiddlewareConsumer) {
    // 1 注册中间件
    // consumer.apply(MyMiddleware).forRoutes('list');// 意思是:为ListModule模块的list路由注册MyMiddleware中间件

    // 2 也可以指定 拦截的方法 比如拦截GET  POST 等 forRoutes 使用对象配置
    // consumer.apply(MyMiddleware).forRoutes({
    //   path: 'list/one',
    //   method: RequestMethod.GET
    // })

    // 3 你甚至可以直接吧 ListController 塞进去
    consumer.apply(MyMiddleware).forRoutes(ListController)
  }
}
